#include "com.h"
#include "valve.h"
#include "public.h"
#include "lora.h"
#include "4g.h"
#include "modbus.h"
#include "rtc.h"

#include "SEGGER_RTT.h"

struct S_REG_COM s_reg_com;

static  uint8_t com_cmd_state;
/*******************************************************************************************/
uint8_t  sw_com(uint16_t reg_addr_index, uint16_t msg)
{
   com_cmd_state = _FAIL;

   switch(reg_addr_index)
   {
      case slave_addr:
				if(msg < 255)   
        {
				   s_reg_com.slave_addr =  msg; 
           com_cmd_state = _SAVE;
        }

				#ifdef _DEBUG
				SEGGER_RTT_printf(0, "slave_addr  %d\r\n", msg);  
				#endif
				break;
    case reset:
          sys_reset();
          break;
    case restore:  
        if((s_reg_com.equipment_type &0x00ff) == _LORA)
         {
						if(lora_restore() == _SUCCESS)  
						{
							s_reg_lora.lora_rfre = 0;
							s_reg_lora.lora_tfre = 0;
							s_reg_com.secret_key =  0; 
              
              com_cmd_state = _SAVE;
            }
         }
         else if((s_reg_com.equipment_type &0x00ff) == _4G)
         {
               com_cmd_state =_SAVE;
         }
               
          if(com_cmd_state ==_SAVE)  
          {
							s_reg_com.slave_addr = 11;
							s_reg_com.report_fre =  3600; 
							set_rtc_sleep_time (3600);
          }
        
				 #ifdef _DEBUG
				 SEGGER_RTT_printf(0, "restore \r\n");  
				 #endif
				 break;
     case secret_key:  
				 if(lora_set_aes(msg) == _SUCCESS)  
         {
            s_reg_com.secret_key = msg; 
            com_cmd_state = _SAVE;
         }

				 #ifdef _DEBUG
				 SEGGER_RTT_printf(0, "secret_key  %d\r\n", msg);  
				 #endif
				 break;
     case longitude_h: 
				 s_reg_com.longitude_h =  msg;  
				 com_cmd_state = _SAVE;

				 #ifdef _DEBUG
				 SEGGER_RTT_printf(0, "longitude_h %x\r\n", msg);  
				 #endif
				 break;
     case longitude_l: 
				 s_reg_com.longitude_l =  msg;  
				 com_cmd_state = _SAVE;

				 #ifdef _DEBUG
				 SEGGER_RTT_printf(0, "longitude_l %x\r\n", msg);  
				 #endif
				 break;
     case latitude_h: 
				 s_reg_com.latitude_h =  msg;  
				 com_cmd_state = _SAVE;

				 #ifdef _DEBUG
				 SEGGER_RTT_printf(0, "latitude_h %x\r\n", msg);  
				 #endif
				 break;
     case latitude_l: 
				 s_reg_com.latitude_l =  msg;  
				 com_cmd_state = _SAVE;

				 #ifdef _DEBUG
				 SEGGER_RTT_printf(0, "latitude_l %x\r\n", msg);  
				 #endif
				 break;
     case report_fre: 
				  if(msg >= 60) // ????? 
         {
						set_rtc_sleep_time (msg);   //msg
            s_reg_com.report_fre =  msg;  
            com_cmd_state = _SAVE;
         }

				 #ifdef _DEBUG
				 SEGGER_RTT_printf(0, "report_fre %d\r\n", msg*10);  
				 #endif
				 break;
    case report: 
       modbus_report();

       #ifdef _DEBUG
       SEGGER_RTT_printf(0, "report \r\n");  
       #endif
       break;
		}

    return  com_cmd_state;
}
/****************************END OF FILE******************************************/
